﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using InterfazConsultas;
using Dominio.Entidades;
using System.Reflection;
using Dominio.Logica;

namespace Interfaz
{
    public partial class CargarConsultas : Form
    {
        public CargarConsultas()
        {
            InitializeComponent();
        }

        private void Consultas_Load(object sender, EventArgs e)
        {

        }

        private void btnImportar_Click(object sender, EventArgs e)
        {
            string ruta = "";
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Filter = "Biblioteca de Archivos |*.dll";
            openFileDialog.ShowDialog();
            ruta = ruta + openFileDialog.FileName;
            openFileDialog.FileName = "";
            txtRutaAssembly.Text = ruta;
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            Consultas consulta = new Consultas();

            AgenciaEntities contexto = Contexto.GetContexto();
            string rutaAssembly = txtRutaAssembly.Text.ToString();
            try
            {
                Assembly a = Assembly.LoadFile(rutaAssembly);
                bool carga = false;
                string NombreConsulta = null;
                foreach (Type i in a.GetTypes())
                {
                    if (typeof(IConsulta).IsAssignableFrom(i))
                    {
                        consulta.Descripcion = i.Name;
                        NombreConsulta = i.Name;
                        consulta.RutaAssembly = txtRutaAssembly.Text.ToString();
                        consulta.Activo = true;
                        //compruebo si ya no existe en la BD
                        if (!(consulta.Exists()))
                        {
                            carga = true;
                            consulta.GuardarConsulta();
                        }
                        else
                        {
                            ManejadorLog.GetLog().Grabar("ERROR: No se puede cargar la consulta: " + NombreConsulta + " porque ya existe, acción realizada por usuario: " + Agencia.GetAgencia().UsuarioLogueado);
                            MessageBox.Show("No puede agregar una consulta ya cargada.", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Error);

                        }
                    }
                }
                if (!carga)
                {
                    ManejadorLog.GetLog().Grabar("ERROR: No se puede cargar la consulta: " + NombreConsulta + " ,no tiene una interfaz válida , acción realizada por usuario: " + Agencia.GetAgencia().UsuarioLogueado);
                    MessageBox.Show("No se puede cargar, consulta inválida.", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    ManejadorLog.GetLog().Grabar("OK: Se ha cargado correctamente la consulta: " + NombreConsulta + " Acción realizada por usuario: " + Agencia.GetAgencia().UsuarioLogueado);
                    MessageBox.Show("Se ha guardado la consulta: " + NombreConsulta + " correctamente", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                }

                Contexto.GetContexto().SaveChanges();
            }
            catch (BadImageFormatException)
            {
                ManejadorLog.GetLog().Grabar("ERROR: Se ha intentado cargar una dll no válida, Acción realizada por usuario: " + Agencia.GetAgencia().UsuarioLogueado);
                MessageBox.Show("No se puede cargar esta consulta, archivo no valido: ", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Dispose();
        }
        
    }
}
